package persistence

import (
	"todo-gin-server/internal/domain/entity"
	"todo-gin-server/internal/domain/repository"
)

// TodoRepositoryImpl 待办事项仓储实现
type TodoRepositoryImpl struct{}

// NewTodoRepository 创建待办事项仓储实例
func NewTodoRepository() repository.TodoRepository {
	return &TodoRepositoryImpl{}
}

// Create 创建待办事项
func (r *TodoRepositoryImpl) Create(todo *entity.Todo) error {
	return DB.Create(todo).Error
}

// FindByID 根据ID查找待办事项
func (r *TodoRepositoryImpl) FindByID(id uint) (*entity.Todo, error) {
	var todo entity.Todo
	err := DB.First(&todo, id).Error
	if err != nil {
		return nil, err
	}
	return &todo, nil
}

// FindByUserID 根据用户ID查找待办事项
func (r *TodoRepositoryImpl) FindByUserID(userID uint) ([]entity.Todo, error) {
	var todos []entity.Todo
	err := DB.Where("user_id = ?", userID).Find(&todos).Error
	if err != nil {
		return nil, err
	}
	return todos, nil
}

// Update 更新待办事项
func (r *TodoRepositoryImpl) Update(todo *entity.Todo) error {
	return DB.Save(todo).Error
}

// Delete 删除待办事项
func (r *TodoRepositoryImpl) Delete(id uint) error {
	return DB.Delete(&entity.Todo{}, id).Error
}